Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java annotation</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Java_annotation"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_annotation rootpage-Java_annotation skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Java annotation</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p>In the <a href="Java_(programming_language)" title="Java (programming language)">Java computer programming language</a>, an <b>annotation</b> is a form of syntactic <a href="Metadata" title="Metadata">metadata</a> that can be added to Java <a href="Source_code" title="Source code">source code</a>, like an <a href="Attribute_(computing)" title="Attribute (computing)">attribute</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> <a href="Class_(computer_programming)" title="Class (computer programming)">Classes</a>, <a href="Method_(computer_programming)" title="Method (computer programming)">methods</a>, <a href="Variable_(computer_science)" title="Variable (computer science)">variables</a>, <a href="Parameter_(computer_programming)" title="Parameter (computer programming)">parameters</a> and <a href="Java_package" title="Java package">Java packages</a> may be annotated. Like <a href="Javadoc" title="Javadoc">Javadoc</a> tags, Java annotations can be read from source files. Unlike <a href="Javadoc" title="Javadoc">Javadoc</a> tags, Java annotations can also be embedded in and read from <a href="Java_class_file" title="Java class file">Java class files</a> generated by the <a href="Java_compiler" title="Java compiler">Java compiler</a>. This allows annotations to be retained by the <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> at <a href="Run_time_(program_lifecycle_phase)" class="mw-redirect" title="Run time (program lifecycle phase)">run-time</a> and read via <a href="Reflection_(computer_science)" class="mw-redirect" title="Reflection (computer science)">reflection</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> It is possible to create meta-annotations out of the existing ones in Java.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>The <a href="Java_(software_platform)" title="Java (software platform)">Java platform</a> has various <i>ad-hoc</i> annotation mechanisms—for example, the <i><code>transient</code></i> modifier, or the <i><code>@Deprecated</code></i> javadoc tag. The <a href="Java_Specification_Request" class="mw-redirect" title="Java Specification Request">Java Specification Request</a> JSR-175 introduced the general-purpose annotation (also known as <i>metadata</i>) facility to the <a href="Java_Community_Process" title="Java Community Process">Java Community Process</a> in 2002; it gained approval in September 2004.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p><p>Annotations became available in the language itself beginning with version 1.5 of the <a href="Java_Development_Kit" title="Java Development Kit">Java Development Kit</a> (JDK). The <a href="Annotation_processing_tool" class="mw-redirect" title="Annotation processing tool"><code>apt</code> tool</a> provided a provisional interface for compile-time annotation processing in JDK version 1.5; JSR-269 formalized this, and it became integrated into the <a href="Javac" title="Javac">javac</a> compiler in version 1.6.
</p><p>In <a href="C%2B%2B26" title="C++26">C++26</a>, <a href="C%2B%2B" title="C++">C++</a> added annotations for reflection that are similar to Java annotations.
</p>
<div class="mw-heading mw-heading2"><h2 id="Built-in_annotations">Built-in annotations</h2></div>
<p>Java defines a set of annotations that are built into the language. Of the seven standard annotations, three are part of <a href="Java.lang" class="mw-redirect" title="Java.lang">java.lang</a>, and the remaining four are imported from java.lang.annotation.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p><b>Annotations applied to Java code:</b>
</p>
<ul><li><code>@Override</code> — Checks that the method is an <a href="Method_overriding" title="Method overriding">override</a>. Causes a <a href="Compilation_error" title="Compilation error">compilation error</a> if the method is not found in one of the <a href="Parent_class" class="mw-redirect" title="Parent class">parent classes</a> or implemented <a href="Interface_(Java)" title="Interface (Java)">interfaces</a>.</li>
<li><code>@Deprecated</code> — Marks the method as obsolete. Causes a compile warning if the method is used.</li>
<li><code>@SuppressWarnings</code> — Instructs the compiler to suppress the <a href="Compile_time" title="Compile time">compile time</a> warnings specified in the annotation parameters.</li></ul>
<p><b>Annotations applied to other annotations (also known as "Meta Annotations"):</b>
</p>
<ul><li><code>@Retention</code> — Specifies how the marked annotation is stored, whether in code only, compiled into the class, or available at runtime through reflection.</li>
<li><code>@Documented</code> — Marks another annotation for inclusion in the documentation.</li>
<li><code>@Target</code> — Marks another annotation to restrict what kind of Java elements the annotation may be applied to.</li>
<li><code>@Inherited</code> — Marks another annotation to be inherited to subclasses of annotated class (by default annotations are not inherited by subclasses).</li></ul>
<p>Since Java 7, three additional annotations have been added to the language.
</p>
<ul><li><code>@SafeVarargs</code> — Suppress warnings for all callers of a method or constructor with a <a href="Generics_in_Java" title="Generics in Java">generics</a> <a href="Variadic_function" title="Variadic function">varargs</a> parameter, since Java 7.</li>
<li><code>@FunctionalInterface</code> — Specifies that the <a href="Declaration_(computer_programming)" title="Declaration (computer programming)">type declaration</a> is intended to be a <a href="Anonymous_function" title="Anonymous function">functional interface</a>, since Java 8.</li>
<li><code>@Repeatable</code> — Specifies that the annotation can be applied more than once to the same declaration, since Java 8.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Example">Example</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Built-in_annotations_2">Built-in annotations</h3></div>
<p>This example demonstrates the use of the <code>@Override</code> annotation. It instructs the compiler to check parent classes for matching methods. In this case, an error is generated because the <code>gettype()</code> method of class Cat doesn't in fact override <code>getType()</code> of class Animal like is desired, because of the <a href="Case_sensitivity" title="Case sensitivity">mismatching case</a>. If the <code>@Override</code> annotation were absent, a new method of name <code>gettype()</code> would be created in class Cat.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Animal</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">speak</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getType</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="s">"Generic animal"</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Cat</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">Animal</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">speak</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// This is a good override.</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Meow."</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">gettype</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// Compile-time error due to typo: should be getType() not gettype().</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="s">"Cat"</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Custom_annotations">Custom annotations</h3></div>
<p>Annotation type declarations are similar to normal interface declarations. An at-sign (@) precedes the <a href="Reserved_word" title="Reserved word">keyword</a> "interface".
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="c1">// @Twizzle is an annotation to method toggle().</span>
<span class="w"> </span><span class="nd">@Twizzle</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">toggle</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="c1">// Declares the annotation Twizzle.</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nd">@interface</span><span class="w"> </span><span class="n">Twizzle</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Annotations may include a set of key-value pairs, which are modeled as methods of the annotation type. Each method declaration defines an element of the annotation type. Method declarations must not have any parameters or a throws clause. Return types are restricted to <a href="Primitive_data_type" title="Primitive data type">primitives</a>, <a href="String_(computer_science)" title="String (computer science)">String</a>, Class, <a href="Enumerated_type" title="Enumerated type">enums</a>, annotations, and <a href="Array_data_type" class="mw-redirect" title="Array data type">arrays</a> of the preceding types. Methods can have <a href="Default_(computer_science)" title="Default (computer science)">default values</a>.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="c1">// Same as: @Edible(value = true)</span>
<span class="w"> </span><span class="nd">@Edible</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
<span class="w"> </span><span class="n">Item</span><span class="w"> </span><span class="n">item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Carrot</span><span class="p">();</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nd">@interface</span><span class="w"> </span><span class="n">Edible</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">value</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="nd">@Author</span><span class="p">(</span><span class="n">first</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Oompah"</span><span class="p">,</span><span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Loompah"</span><span class="p">)</span>
<span class="w"> </span><span class="n">Book</span><span class="w"> </span><span class="n">book</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Book</span><span class="p">();</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nd">@interface</span><span class="w"> </span><span class="n">Author</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">first</span><span class="p">();</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">last</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Annotations themselves may be annotated to indicate where and when they can be used:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="nd">@Retention</span><span class="p">(</span><span class="n">RetentionPolicy</span><span class="p">.</span><span class="na">RUNTIME</span><span class="p">)</span><span class="w"> </span><span class="c1">// Make this annotation accessible at runtime via reflection.</span>
<span class="w"> </span><span class="nd">@Target</span><span class="p">({</span><span class="n">ElementType</span><span class="p">.</span><span class="na">METHOD</span><span class="p">})</span><span class="w"> </span><span class="c1">// This annotation can only be applied to class methods.</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nd">@interface</span><span class="w"> </span><span class="n">Tweezable</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>The compiler reserves a set of special annotations (including <code>@Deprecated</code>, <code>@Override</code> and <code>@SuppressWarnings</code>) for syntactic purposes.
</p><p>Annotations are often used by <a href="Software_framework" title="Software framework">frameworks</a> as a way of conveniently applying behaviours to user-defined classes and methods that must otherwise be declared in an external source (such as an XML configuration file) or programmatically (with API calls). The following, for example, is an annotated <a href="Java_Persistence_API" class="mw-redirect" title="Java Persistence API">JPA</a> data class:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="nd">@Entity</span><span class="w"> </span><span class="c1">// Declares this an entity bean</span>
<span class="nd">@Table</span><span class="p">(</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"people"</span><span class="p">)</span><span class="w"> </span><span class="c1">// Maps the bean to SQL table "people"</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Person</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">Serializable</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Id</span><span class="w"> </span><span class="c1">// Map this to the primary key column.</span>
<span class="w"> </span><span class="nd">@GeneratedValue</span><span class="p">(</span><span class="n">strategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GenerationType</span><span class="p">.</span><span class="na">AUTO</span><span class="p">)</span><span class="w"> </span><span class="c1">// Database will generate new primary keys, not us.</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">Integer</span><span class="w"> </span><span class="n">id</span><span class="p">;</span>

<span class="w"> </span><span class="nd">@Column</span><span class="p">(</span><span class="n">length</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">32</span><span class="p">)</span><span class="w"> </span><span class="c1">// Truncate column values to 32 characters.</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">Integer</span><span class="w"> </span><span class="nf">getId</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">id</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setId</span><span class="p">(</span><span class="n">Integer</span><span class="w"> </span><span class="n">id</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">id</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getName</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setName</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>The annotations are not method calls and will not, by themselves, do anything. Rather, the class object is passed to the <a href="Java_Persistence_API" class="mw-redirect" title="Java Persistence API">JPA</a> implementation at <a href="Run_time_(program_lifecycle_phase)" class="mw-redirect" title="Run time (program lifecycle phase)">run-time</a>, which then extracts the annotations to generate an <a href="Object%E2%80%93relational_mapping" title="Object–relational mapping">object–relational mapping</a>.
</p><p>A complete example is given below:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">package</span><span class="w"> </span><span class="nn">com.annotation</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.Documented</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.ElementType</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.Inherited</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.Retention</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.RetentionPolicy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.Target</span><span class="p">;</span>

<span class="nd">@Documented</span>
<span class="nd">@Retention</span><span class="p">(</span><span class="n">RetentionPolicy</span><span class="p">.</span><span class="na">RUNTIME</span><span class="p">)</span>
<span class="nd">@Target</span><span class="p">({</span><span class="n">ElementType</span><span class="p">.</span><span class="na">TYPE</span><span class="p">,</span><span class="n">ElementType</span><span class="p">.</span><span class="na">METHOD</span><span class="p">,</span>
<span class="w"> </span><span class="n">ElementType</span><span class="p">.</span><span class="na">CONSTRUCTOR</span><span class="p">,</span><span class="n">ElementType</span><span class="p">.</span><span class="na">ANNOTATION_TYPE</span><span class="p">,</span>
<span class="w"> </span><span class="n">ElementType</span><span class="p">.</span><span class="na">PACKAGE</span><span class="p">,</span><span class="n">ElementType</span><span class="p">.</span><span class="na">FIELD</span><span class="p">,</span><span class="n">ElementType</span><span class="p">.</span><span class="na">LOCAL_VARIABLE</span><span class="p">})</span>
<span class="nd">@Inherited</span>

<span class="kd">public</span><span class="w"> </span><span class="nd">@interface</span><span class="w"> </span><span class="n">Unfinished</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">Priority</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">LOW</span><span class="p">,</span><span class="w"> </span><span class="n">MEDIUM</span><span class="p">,</span><span class="w"> </span><span class="n">HIGH</span><span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">value</span><span class="p">();</span>
<span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="nf">changedBy</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">""</span><span class="p">;</span>
<span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="nf">lastChangedBy</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">""</span><span class="p">;</span>
<span class="w"> </span><span class="n">Priority</span><span class="w"> </span><span class="nf">priority</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="n">Priority</span><span class="p">.</span><span class="na">MEDIUM</span><span class="p">;</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">createdBy</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">"James Gosling"</span><span class="p">;</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">lastChanged</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">"2011-07-08"</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">package</span><span class="w"> </span><span class="nn">com.annotation</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="nd">@interface</span><span class="w"> </span><span class="n">UnderConstruction</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">owner</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">"Patrick Naughton"</span><span class="p">;</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">value</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">"Object is Under Construction."</span><span class="p">;</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">createdBy</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">"Mike Sheridan"</span><span class="p">;</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">lastChanged</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">"2011-07-08"</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">package</span><span class="w"> </span><span class="nn">com.validators</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">javax.faces.application.FacesMessage</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.faces.component.UIComponent</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.faces.context.FacesContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.faces.validator.Validator</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.faces.validator.ValidatorException</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">com.annotation.UnderConstruction</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.annotation.Unfinished</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.annotation.Unfinished.Priority</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.util.Util</span><span class="p">;</span>

<span class="nd">@UnderConstruction</span><span class="p">(</span><span class="n">owner</span><span class="o">=</span><span class="s">"Jon Doe"</span><span class="p">)</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">DateValidator</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">Validator</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">validate</span><span class="p">(</span><span class="n">FacesContext</span><span class="w"> </span><span class="n">context</span><span class="p">,</span><span class="w"> </span><span class="n">UIComponent</span><span class="w"> </span><span class="n">component</span><span class="p">,</span><span class="w"> </span><span class="n">Object</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
<span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">ValidatorException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">date</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="p">)</span><span class="w"> </span><span class="n">value</span><span class="p">;</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">errorLabel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Please enter a valid date."</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">component</span><span class="p">.</span><span class="na">getAttributes</span><span class="p">().</span><span class="na">isEmpty</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">errorLabel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="p">)</span><span class="w"> </span><span class="n">component</span><span class="p">.</span><span class="na">getAttributes</span><span class="p">().</span><span class="na">get</span><span class="p">(</span><span class="s">"errordisplayval"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">Util</span><span class="p">.</span><span class="na">validateAGivenDate</span><span class="p">(</span><span class="n">date</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Unfinished</span><span class="p">(</span><span class="n">changedBy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Steve"</span><span class="p">,</span>
<span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"whether to add message to context or not, confirm"</span><span class="p">,</span>
<span class="w"> </span><span class="n">priority</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Priority</span><span class="p">.</span><span class="na">HIGH</span>
<span class="w"> </span><span class="p">)</span>
<span class="w"> </span><span class="n">FacesMessage</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FacesMessage</span><span class="p">();</span>
<span class="w"> </span><span class="n">message</span><span class="p">.</span><span class="na">setSeverity</span><span class="p">(</span><span class="n">FacesMessage</span><span class="p">.</span><span class="na">SEVERITY_ERROR</span><span class="p">);</span>
<span class="w"> </span><span class="n">message</span><span class="p">.</span><span class="na">setSummary</span><span class="p">(</span><span class="n">errorLabel</span><span class="p">);</span>
<span class="w"> </span><span class="n">message</span><span class="p">.</span><span class="na">setDetail</span><span class="p">(</span><span class="n">errorLabel</span><span class="p">);</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ValidatorException</span><span class="p">(</span><span class="n">message</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Processing">Processing</h2></div>
<p>When Java source code is compiled, annotations can be processed by compiler plug-ins called annotation processors. Processors can produce informational messages or create additional Java source files or resources, which in turn may be compiled and processed. However, annotation processors cannot modify the annotated code itself. (Code modifications may be implemented using methods beyond the Java Language Specification.) The Java compiler conditionally stores annotation metadata in the class files, if the annotation has a <code>RetentionPolicy</code> of <code>CLASS</code> or <code>RUNTIME</code>. Later, the <a href="Java_virtual_machine" title="Java virtual machine">JVM</a> or other programs can look for the metadata to determine how to interact with the program elements or change their behavior.
</p><p>In addition to processing an annotation using an annotation processor, a Java programmer can write their own code that uses reflection to process the annotation. <a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java SE</a> 5 supports a new interface that is defined in the <code>java.lang.reflect</code> package. This package contains the interface called <code>AnnotatedElement</code> that is implemented by the Java reflection classes including <code>Class</code>, <code>Constructor</code>, <code>Field</code>, <code>Method</code>, and <code>Package</code>. The implementations of this interface are used to represent an annotated element of the program currently running in the Java Virtual Machine. This interface allows annotations to be read reflectively.
</p><p>The <code>AnnotatedElement</code> interface provides access to annotations having <code>RUNTIME</code> retention. This access is provided by the <code>getAnnotation</code>, <code>getAnnotations</code>, and <code>isAnnotationPresent</code> methods. Because annotation types are compiled and stored in byte code files just like classes, the annotations returned by these methods can be queried just like any regular Java object. A complete example of processing an annotation is provided below:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.Retention</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.RetentionPolicy</span><span class="p">;</span>

<span class="c1">// This is the annotation to be processed</span>
<span class="c1">// Default for Target is all Java Elements</span>
<span class="c1">// Change retention policy to RUNTIME (default is CLASS)</span>
<span class="nd">@Retention</span><span class="p">(</span><span class="n">RetentionPolicy</span><span class="p">.</span><span class="na">RUNTIME</span><span class="p">)</span>
<span class="kd">public</span><span class="w"> </span><span class="nd">@interface</span><span class="w"> </span><span class="n">TypeHeader</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Default value specified for developer attribute</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">developer</span><span class="p">()</span><span class="w"> </span><span class="k">default</span><span class="w"> </span><span class="s">"Unknown"</span><span class="p">;</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">lastModified</span><span class="p">();</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="o">[]</span><span class="w"> </span><span class="n">teamMembers</span><span class="p">();</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">meaningOfLife</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// This is the annotation being applied to a class</span>
<span class="nd">@TypeHeader</span><span class="p">(</span><span class="n">developer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Bob Bee"</span><span class="p">,</span>
<span class="w"> </span><span class="n">lastModified</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"2013-02-12"</span><span class="p">,</span>
<span class="w"> </span><span class="n">teamMembers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s">"Ann"</span><span class="p">,</span><span class="w"> </span><span class="s">"Dan"</span><span class="p">,</span><span class="w"> </span><span class="s">"Fran"</span><span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="n">meaningOfLife</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">42</span><span class="p">)</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SetCustomAnnotation</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Class contents go here</span>
<span class="p">}</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="c1">// This is the example code that processes the annotation</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.annotation.Annotation</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.reflect.AnnotatedElement</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">UseCustomAnnotation</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Class</span><span class="o">&lt;</span><span class="n">SetCustomAnnotation</span><span class="o">&gt;</span><span class="w"> </span><span class="n">classObject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SetCustomAnnotation</span><span class="p">.</span><span class="na">class</span><span class="p">;</span>
<span class="w"> </span><span class="n">readAnnotation</span><span class="p">(</span><span class="n">classObject</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">readAnnotation</span><span class="p">(</span><span class="n">AnnotatedElement</span><span class="w"> </span><span class="n">element</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Annotation element values: \n"</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">element</span><span class="p">.</span><span class="na">isAnnotationPresent</span><span class="p">(</span><span class="n">TypeHeader</span><span class="p">.</span><span class="na">class</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// getAnnotation returns Annotation type</span>
<span class="w"> </span><span class="n">Annotation</span><span class="w"> </span><span class="n">singleAnnotation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>
<span class="w"> </span><span class="n">element</span><span class="p">.</span><span class="na">getAnnotation</span><span class="p">(</span><span class="n">TypeHeader</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="n">TypeHeader</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">TypeHeader</span><span class="p">)</span><span class="w"> </span><span class="n">singleAnnotation</span><span class="p">;</span>

<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Developer: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">header</span><span class="p">.</span><span class="na">developer</span><span class="p">());</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Last Modified: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">header</span><span class="p">.</span><span class="na">lastModified</span><span class="p">());</span>

<span class="w"> </span><span class="c1">// teamMembers returned as String []</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">print</span><span class="p">(</span><span class="s">"Team members: "</span><span class="p">);</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">member</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">header</span><span class="p">.</span><span class="na">teamMembers</span><span class="p">())</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">print</span><span class="p">(</span><span class="n">member</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">", "</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">print</span><span class="p">(</span><span class="s">"\n"</span><span class="p">);</span>

<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Meaning of Life: "</span><span class="o">+</span><span class="w"> </span><span class="n">header</span><span class="p">.</span><span class="na">meaningOfLife</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">exception</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">exception</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Jakarta_Annotations" title="Jakarta Annotations">Jakarta Annotations</a></li>
<li><a href="Metadata_(CLI)#Attributes" title="Metadata (CLI)">CLI Attributes</a></li>
<li><a href="Java_(programming_language)" title="Java (programming language)">Java</a></li>
<li><a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a></li>
<li><a href="Model-driven_architecture" title="Model-driven architecture">Model-driven architecture</a></li>
<li><a href="Python_syntax_and_semantics#Decorators" title="Python syntax and semantics">Python decorators</a>, inspired by Java annotations, which have a similar syntax.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width reflist-columns-2">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110925021948/http://download.oracle.com/javase/1,5.0/docs/guide/language/annotations.html">"Annotations"</a>. <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>. Archived from <a rel="nofollow" class="external text" href="http://download.oracle.com/javase/1,5.0/docs/guide/language/annotations.html">the original</a> on 2011-09-25<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-09-30</span></span>.</cite>.</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFSun_Microsystems2005" class="citation book cs1"><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a> (2005). <a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html"><i>Java(TM) Language Specification</i></a> (3rd&nbsp;ed.). <a href="Prentice_Hall" title="Prentice Hall">Prentice Hall</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-321-24678-0</bdi>.</cite>.</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFDare_Obasanjo2007" class="citation web cs1">Dare Obasanjo (2007). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120919093308/http://25hoursaday.com/">"A COMPARISON OF MICROSOFT'S C# PROGRAMMING LANGUAGE TO SUN MICROSYSTEMS' JAVA PROGRAMMING LANGUAGE: Metadata Annotations"</a>. Dare Obasanjo. Archived from <a rel="nofollow" class="external text" href="http://www.25hoursaday.com/">the original</a> on 2012-09-19<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-09-20</span></span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFCoward2006" class="citation web cs1">Coward, Danny (2006-11-02). <a rel="nofollow" class="external text" href="http://www.jcp.org/en/jsr/detail?id=175#2">"JSR 175: A Metadata Facility for the JavaTM Programming Language"</a>. <a href="Java_Community_Process" title="Java Community Process">Java Community Process</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2008-03-05</span></span>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/annotations/predefined.html">"Predefined Annotation Types"</a>. <a href="Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-12-17</span></span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.java2s.com/Tutorial/Java/0020__Language/TheBuiltInAnnotations.htm">"The Built-In Annotations&nbsp;: Standard Annotations"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-12-17</span></span>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://java.sun.com/javase/6/docs/technotes/guides/language/annotations.html">Introduction to Java 6 Annotations at Sun Developer Network Site</a></li>
<li><a rel="nofollow" class="external text" href="http://www.developer.com/java/other/article.php/3556176">An Introduction to Java Annotations by M. M. Islam Chisty</a></li>
<li><cite id="CITEREFSrinivasan2007" class="citation web cs1">Srinivasan, Krishna (August 11, 2007). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150531080324/http://www.javabeat.net/annotations-in-java-5-0/">"Annotations in Java 5.0"</a>. <i>JavaBeat</i>. Archived from <a rel="nofollow" class="external text" href="http://www.javabeat.net/annotations-in-java-5-0/">the original</a> on May 31, 2015.</cite></li>
<li><cite id="CITEREFHunt2006" class="citation web cs1">Hunt, John (24 Feb 2006). <a rel="nofollow" class="external text" href="https://www.theregister.com/2006/02/24/java_annotations/">"Of Java Annotations"</a>. <i>The Register</i>.</cite></li>
<li><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20140223113106/http://www.somanyword.com/2014/02/how-to-create-and-implement-custom-annotations-in-java/">"How to create and implement custom annotations in Java?"</a>. <i>So Many Word</i>. February 15, 2014. Archived from <a rel="nofollow" class="external text" href="http://www.somanyword.com/2014/02/how-to-create-and-implement-custom-annotations-in-java/">the original</a> on Feb 23, 2014.</cite></li>
<li><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.tutorialsdesk.com/2014/10/java-annotations-tutorial-with-examples.html">"Java Annotations Tutorial with examples"</a>. <i>TutorialsDesk</i>. October 9, 2014.</cite></li>
<li><cite id="CITEREFThakor2015" class="citation web cs1">Thakor, Vicky (13 October 2015). <a rel="nofollow" class="external text" href="http://www.javaquery.com/2015/10/understanding-annotations-in-java.html">"Understanding Annotations in Java"</a>. <i>Java by examples</i>.</cite></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-08-06" href="https://en.wikipedia.org/wiki/?title=Java_annotation&amp;oldid=1304532654">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>